package com.liwalo.action;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.liwalo.dao.AtributoDAO;
import com.liwalo.dao.ListadoCiudadDAO;
import com.liwalo.dao.ListadoProvDAO;
import com.liwalo.dao.MediosContactoDAO;
import com.liwalo.dao.ProductoDAO;
import com.liwalo.dao.TipoViaDAO;
import com.liwalo.dao.ValorDAO;
import com.liwalo.entities.Atributo;
import com.liwalo.entities.ListadoCiudad;
import com.liwalo.entities.ListadoProv;
import com.liwalo.entities.MediosContacto;
import com.liwalo.entities.Producto;
import com.liwalo.entities.ProductosPedido;
import com.liwalo.entities.TipoVia;
import com.liwalo.entities.Usuario;
import com.liwalo.entities.Valor;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import java.sql.Timestamp;

public class RegistroUsuarioAnonimo extends ActionSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = -7214466052834757817L;
	
	private List<ProductosPedido> listadocarrito;
	private List<ListadoCiudad> listadociudad;
	private List<ListadoProv> listadoprov;
	private List<TipoVia> listatipovia;
	private double totalprecio;
	private double totalprecioiva;
	private Usuario usuariovo;
    private MediosContacto medioscvo;
	private int producto_Id;
	private int atributoid;
	private int valorid;
	private int unidades;
	private int provincia;
	private static final double GASTO_ENVIO=7;
	
	public String execute() throws Exception {
		
		Map parameters = ActionContext.getContext().getParameters();
		Map session = ActionContext.getContext().getSession();
		
	 	MediosContactoDAO mediosDao=new MediosContactoDAO();
		ListadoCiudadDAO listadocdDao =new ListadoCiudadDAO();
		TipoViaDAO tipoviaDao=new TipoViaDAO();
		ListadoProvDAO listadoprovDao=new ListadoProvDAO();
		ProductoDAO productoDao=new ProductoDAO();
		AtributoDAO atributoDao=new AtributoDAO();
		ValorDAO valorDao=new ValorDAO();
		
		
		
		Producto productovo=new Producto();
		ProductosPedido prodpedidovo =new ProductosPedido();
		Atributo atributovo = new Atributo();
		Valor valorvo=new Valor();
		
		
		 java.util.Date fechaActual = new java.util.Date();
		 
		 //Verificamos que el ususario no exista en la session
		 usuariovo=(Usuario) session.get("usuario");
		 if((session==null || session.isEmpty()) || (usuariovo==null)){
			 
			 //Creamos en la sesion un Usuario Invitado
			 	Usuario user= new Usuario();
				user.setNombre("Invitado");
				session.put("login", "true");
		        session.put("userName", "Invitado"+new Timestamp(fechaActual.getTime()));
		        session.put("usuario", user);
		       
		       
		        
		      
		 }

		//Obtenemos los datos del Carrito	 
		  listadocarrito=(List<ProductosPedido>) session.get("listadocarrito");
		
		 usuariovo=(Usuario) session.get("usuario");
		 if(!("Invitado").equals(usuariovo.getNombre()) && usuariovo.getNombre()!=null){
				setMedioscvo(mediosDao.findById(usuariovo));
				ListadoProv prov=new ListadoProv();
				prov.setId(getMedioscvo().getListadoProvId().getId());
				 listadociudad=listadocdDao.findbyProvincia(prov);
			 }else{
				 listadociudad=listadocdDao.findAllListadoCiudad();
			 }
		 
		setListadoprov(listadoprovDao.findAllListadoProv());
		setListatipovia(tipoviaDao.findAllTipoVia());	
			
		listadociudad = new ArrayList<ListadoCiudad>();
		
		
		
		listadociudad=listadocdDao.findAllListadoCiudad();
		
		
		
		//Obtener el total del precio de los productos con unidades
		
		Iterator<ProductosPedido> iterador = listadocarrito.listIterator(); 
		totalprecio=0;
		while( iterador.hasNext() ) {
			ProductosPedido pro = (ProductosPedido) iterador.next(); 
			totalprecio+=(pro.getUnidades()*pro.getPrecioUnidad());
	}
		
		
		session.put("listadocarrito", listadocarrito);
		
		usuariovo=(Usuario) session.get("usuario");
		totalprecioiva=totalprecio+GASTO_ENVIO+5;
		
		return SUCCESS;
	}

	public List<ProductosPedido> getListadocarrito() {
		return listadocarrito;
	}

	public void setListadocarrito(List<ProductosPedido> listadocarrito) {
		this.listadocarrito = listadocarrito;
	}

	public List<ListadoCiudad> getListadociudad() {
		return listadociudad;
	}

	public void setListadociudad(List<ListadoCiudad> listadociudad) {
		this.listadociudad = listadociudad;
	}

	public List<ListadoProv> getListadoprov() {
		return listadoprov;
	}

	public void setListadoprov(List<ListadoProv> listadoprov) {
		this.listadoprov = listadoprov;
	}

	public List<TipoVia> getListatipovia() {
		return listatipovia;
	}

	public void setListatipovia(List<TipoVia> listatipovia) {
		this.listatipovia = listatipovia;
	}

	public double getTotalprecio() {
		return totalprecio;
	}

	public void setTotalprecio(double totalprecio) {
		this.totalprecio = totalprecio;
	}

	public double getTotalprecioiva() {
		return totalprecioiva;
	}

	public void setTotalprecioiva(double totalprecioiva) {
		this.totalprecioiva = totalprecioiva;
	}

	public Usuario getUsuariovo() {
		return usuariovo;
	}

	public void setUsuariovo(Usuario usuariovo) {
		this.usuariovo = usuariovo;
	}

	public MediosContacto getMedioscvo() {
		return medioscvo;
	}

	public void setMedioscvo(MediosContacto medioscvo) {
		this.medioscvo = medioscvo;
	}

	public int getProducto_Id() {
		return producto_Id;
	}

	public void setProducto_Id(int producto_Id) {
		this.producto_Id = producto_Id;
	}

	public int getAtributoid() {
		return atributoid;
	}

	public void setAtributoid(int atributoid) {
		this.atributoid = atributoid;
	}

	public int getValorid() {
		return valorid;
	}

	public void setValorid(int valorid) {
		this.valorid = valorid;
	}

	public int getUnidades() {
		return unidades;
	}

	public void setUnidades(int unidades) {
		this.unidades = unidades;
	}

	public int getProvincia() {
		return provincia;
	}

	public void setProvincia(int provincia) {
		this.provincia = provincia;
	}

	
	
	
}
